Docker上のGowin EDAでLチカ
#Gowin #Sipeed
Docker上のGowin EDAを使って、Tang Primer 20KをLチカしてみる。
Gowin EDAを起動
事前に XQuartz を起動しておき、Gowin EDAを起動する。
code:sh
$ cd tangprimer20k-samples/
$ docker run -it --rm -v pwd:/root -e DISPLAY=host.docker.internal:0 -v ~/.Xauthority:/root/.Xauthority gowin-eda gw_ide
プロジェクトを作成
File > New から新規のFPGA Design Projectを作成。
Project Name
Blink
Select Deivce
GW2A-LV18PG256C8/I7 を選択
System Verilog を使うように設定
プロジェクトの設定を開き、Verilog Language に「System Verilog 2017」を設定
https://gyazo.com/a2b5827d27ec9e94b5280deacfbb9635
Verilog の記述
Verilog ファイルを新規作成する。
code:src/top.sv
module top(
input wire clk,
output wire 5:0 led
);
assign led = 6'b101010;
endmodule
上記コードを書いたら、合成を実行する
https://gyazo.com/08b69d9ac90703e40fd8e92549c5fec8
物理制約ファイルの記述
code:src/Blink.cst
IO_LOC "clk" H11;
IO_PORT "clk" IO_TYPE=LVCMOS18 PULL_MODE=UP BANK_VCCIO=1.8;
IO_LOC "led0" C13;
IO_PORT "led0" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8;
IO_LOC "led1" A13;
IO_PORT "led1" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8;
IO_LOC "led2" N16;
IO_PORT "led2" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8;
IO_LOC "led3" N14;
IO_PORT "led3" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8;
IO_LOC "led4" L14;
IO_PORT "led4" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8;
IO_LOC "led5" L16;
IO_PORT "led5" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8;
合わせて、LED0とLED1を使用するため、以下の設定を行っておく
https://gyazo.com/3c7e4882da9ad7ba2de1c885d208012d
配置と配線
https://gyazo.com/3c7a601df6e964bebab5ea8d854b2277
書き込み
配線と配置を終えるとビットストリームが作成されるので、macOSから書き込みを行う。
code:sh
openFPGALoader -b tangprimer20k Blink/impl/pnr/Blink.fs
ボタンも使ってみる
code:src/top.sv
module top(
input wire clk,
input wire 4:0 btn_n, // ボタンはネガティブロジック
output wire 5:0 led_n // LEDはネガティブロジック
);
assign led_n = { 1'b1, btn_n };
endmodule
code:src/Blink.cst
//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
//All rights reserved.
//File Title: Physical Constraints file
//Tool Version: V1.9.10.03 Education
//Part Number: GW2A-LV18PG256C8/I7
//Device: GW2A-18
//Device Version: C
//Created Time: Fri 01 24 12:35:12 2025
IO_LOC "clk" H11;
IO_PORT "clk" IO_TYPE=LVCMOS18 PULL_MODE=UP BANK_VCCIO=1.8;
IO_LOC "led_n0" C13;
IO_PORT "led_n0" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8;
IO_LOC "led_n1" A13;
IO_PORT "led_n1" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8;
IO_LOC "led_n2" N16;
IO_PORT "led_n2" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8;
IO_LOC "led_n3" N14;
IO_PORT "led_n3" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8;
IO_LOC "led_n4" L14;
IO_PORT "led_n4" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8;
IO_LOC "led_n5" L16;
IO_PORT "led_n5" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8;
IO_LOC "btn_n0" T10;
IO_PORT "btn_n0" IO_TYPE=LVCMOS33;
IO_LOC "btn_n1" T3;
IO_PORT "btn_n1" IO_TYPE=LVCMOS15;
IO_LOC "btn_n2" T2;
IO_PORT "btn_n2" IO_TYPE=LVCMOS15;
IO_LOC "btn_n3" D7;
IO_PORT "btn_n3" IO_TYPE=LVCMOS15;
IO_LOC "btn_n4" C7;
IO_PORT "btn_n4" IO_TYPE=LVCMOS15;
参考
【FPGA】Tang Primer 20KでLチカ
https://zenn.dev/norma/articles/668011d9a55bef
tang Nano 9Kで開発を始めるためのメモ
https://zenn.dev/bbled/articles/0d6ea2a5056e8a
gw_sh のサンプル
https://github.com/ciniml/fpga_samples/blob/main/eda/cpu_matrix_led/project.tcl
Tang Primer 20Kのピン番号